home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / wais / waisgate / irext.h < prev    next >
C/C++ Source or Header  |  1995-05-09  |  17KB  |  499 lines

  1. /* WIDE AREA INFORMATION SERVER SOFTWARE:
  2.    No guarantees or restrictions.  See the readme file for the full standard
  3.    disclaimer. */
  4.  
  5. /* Include file for the irhash.c file.
  6.    Implements the building functions in irext.h */
  7.  
  8. #ifndef IREXT_H
  9. #define IREXT_H
  10.  
  11.  
  12. /* An interface for adding new server types into the WAIS system.
  13.  * The idea is to use the parsing and bookkeeping operatios of the serial 
  14.  * indexer, while allowing different invered file and signiture systems 
  15.  * to be added as back ends.
  16.  *
  17.  * - Tracy Shen and Brewster 3/91
  18.  */
  19.  
  20. /*
  21.  * $Log:    irext.h,v $
  22.  * Revision 1.24  92/03/20  11:02:16  jonathan
  23.  * Added word_position boolean to add_word.  This is a new switch to allow an
  24.  * indexer to ignore the word position info (if it cares), based on
  25.  * indexer parameters.
  26.  * 
  27.  * Revision 1.23  92/03/05  07:06:12  shen
  28.  * update init_search_engine prototype to add two more parameters
  29.  * For seeker-ram, the twonew parameters are: grow percent and textsixe
  30.  * 
  31.  * Revision 1.22  92/02/29  20:11:57  jonathan
  32.  * Conditionalized definition of DF_INDEPENDENT, etc.
  33.  * 
  34.  * Revision 1.21  92/02/13  12:24:25  jonathan
  35.  * conditionalized inclusion of irparse.h on BOOL.
  36.  * 
  37.  *
  38.  * Tracy changes:
  39.  *  - in function "add_word", add two more parameters, source and date
  40.  *  - add a new function "set_query_parameter"
  41.  * proposed changes by brewster:
  42.  *  replace date_type with time_t: accepted
  43.  *  take out all "unsigned" type modifiers (tracey will concider this)
  44.  *  replace short with long: accepted
  45.  *  replace int with long (we port to 16 bit machines still): accepted
  46.  *  added source to delete_doc_id parameters: accepted
  47.  * Proposed changes by brewster and tracy:
  48.  *  if routines are successful return 0, otherwise an error code: accepted
  49.  * Proposed changes by harry:
  50.  *  make the dictionary value be any size.  This can be done by 
  51.  *   passing in a size arg or by passing in read and write routines.
  52.  *  have a function that says we will not be calling best_hit anymore.
  53.  * proposed changes by brewster:
  54.  *  took out hash_pos from add word.
  55.  *  change source to a database* db.
  56.  *  added finished_best_hit, finished_search_word(db), finished_add_word
  57.  * NOT ACCEPTED proposed by tracy (9/91)
  58.  *  create a function init_search_word and pass an array of db's
  59.  *  modify search_word dont pass db.
  60.  *  modify finish_search_word dont pass db.
  61.  *  create init_best_hit pass dbs
  62.  *  modify best_hit to pass db (to be modified)
  63.  *  modify a hit structure to contain a db
  64.  *  create se_init, se_exit (tracy will send these in)
  65.  *  create se_open_database, se_close_database (tracy will send these in)
  66.  * ACCEPTED proposed by tracy (9/91)  
  67.  *  create a function init_search_word and pass db
  68.  *  add total word count to db (not set in server side)
  69.  *  create init_best_hit 
  70.  *  change dbs slot query_parameter_type from being a "database** dbs"
  71.  *    to "char** srcs" (not done on server side yet)
  72.  *  modify best_hit to have argument doc_id, best_character, score
  73.  *  create ext_open_database, ext_close_database
  74.  *  modify init_add_word to add char* src. (not done in server side)
  75.  * proposed changes by brewster
  76.  *  modify best_hit to take both best_character and best_line
  77.  * IMPLEMENTED proposed by brewster
  78.  *  specify that search_word take a downcased word
  79.  *  create function char *database_file(char *database_name)
  80.  *    that will return the name of the file that the database is stored in.
  81.  *    on Seeker and Beta this would return "INDEX" always, 
  82.  *     and serial server this would returns its argument. 
  83.  * IMPLEMENTED proposed by brewster
  84.  *   the srcs list in set_query_parameter will be what the user
  85.  *   passed in the database fields of the Z39.50 request.
  86.  *   This means that if multiple src's are specified separate by comma's
  87.  *   then it is up to the backend to parse those out.
  88.  * IMPLEMENTED proposed by brewster
  89.  *   the src field in init_add_word will always be NULL and
  90.  *   the information will be passed via set_query_parameter.
  91.  * APPROVED proposed by brewster
  92.  *   add init_search_engine and finished_search_engine
  93.  *     this would be called when the server process starts and exists.
  94.  *     these functions could check to make sure everything is sane.
  95.  *     same arguments in ext_open_database
  96.  * proposed by brewster 
  97.  *   change scores to doubles rather than longs.  maybe weights too.
  98.  * IMPLEMENTED proposed by tracy
  99.  *   pass another argument to search_word and add_word:
  100.  *    long word_pair.
  101.  * proposed by tracy: APPROVED
  102.  *   take out src arg from init_add_word
  103.  *   change arg name in search_word from doc_id to relevant_doc_number
  104.  *   take out dictionary_value from search_word
  105.  *   New arguments to ext_open_database:
  106.  *     initialize (same)
  107.  *     for_search  (if true searches can happen, otherwise can not)
  108.  *     for_update  (if true updates can happen, otherwise can not)
  109.  * proposed change by tracy
  110.  *   add 2 more long arguments to init_search_engine and ext_open_database
  111.  *     (for seeker, the first argument should be the percentage of 
  112.  *      CM memory for signatures.  For open_database put in the total 
  113.  *       raw text size).
  114.  *     
  115.  */
  116.  
  117. #include "cdialect.h"
  118. #include "irfiles.h" /* for database */
  119.  
  120. #ifdef BOOL
  121. #include "irparse.h" /* for boolean searches */
  122. #endif
  123.  
  124. #ifdef __cplusplus
  125. /* declare these as C style functions */
  126. extern "C"
  127.     {
  128. #endif /* def __cplusplus */
  129.  
  130. /* ============================
  131.  * ===  Control Functions  ===
  132.  * ============================*/
  133.  
  134. /*
  135.  * SE_init - Search Engine initialization function
  136.  *
  137.  * Parameter description:
  138.  *   if_update - if update is to be performed in this run, value
  139.  *               be True (1L) or False(0L).
  140.  *   if_query  - if query is to be performed in this run, value
  141.  *               be True (1L) or False (0L).
  142.  *
  143.  * Functional description:
  144.  *   This function should be the first function call FE(front end)
  145.  *   make to the BE(back end) SE(search engine).
  146.  *   It gives the SE a chance to initialize its global variables
  147.  *   to best serve FE's requests efficiently.
  148.  *   It only needs to * be called once each run. Sebsequent calls
  149.  *   will be ignored.
  150.  *   For a batch update ( eg, waisindex run),
  151.  *   parameters if_update should be set to True, and if_quesry be False.
  152.  *   For serving query (eg, a waisserver run), the if_query will be True.
  153.  *   To allow on-line update while serving query, if_update should be
  154.  *   set to True, otherwise be False.
  155.  *   The waisserver has to be able to take on-line update request and
  156.  *   update the search engine's database.
  157.  *
  158.  */
  159.  
  160. long SE_init _AP(( long if_update, long if_query));
  161.  
  162. /*
  163.  * SE_exit - Search Engine exit function
  164.  *
  165.  * Parameter description:
  166.  *   None
  167.  *
  168.  * Functional description:
  169.  *   This function should be the last function call FE(front end)
  170.  *   makes to SE. It gives the SE a chance to flush data kept in
  171.  *   buffers, clean up temporary files,  and free up resourecs.
  172.  */
  173.  
  174. long SE_exit _AP(( void));
  175.  
  176.  
  177.  
  178. long SE_open_database _AP (( database *db,
  179.                        long if_initialize,
  180.                        long if_update,
  181.                        long if_query,
  182.                        long *parameter1,
  183.                        long *parameter2));
  184. /*
  185.  * SE_open_database - open a database
  186.  *
  187.  * Parameter description:
  188.  *   db - pointer to a database structure. The structure should
  189.  *               contain a field "SE_private_tag" of type void *.
  190.  *               The SE will fill in this field when the
  191.  *               database is open. This is the search enginer's pointer
  192.  *               to its data structure of the database.
  193.  *   if_initialize - if initialize this databse. If value is
  194.  *               True, the database will be set empty. If
  195.  *               one already exists, it will be purged
  196.  *               or marked old  according to the system maintenance
  197.  *               policy employed.
  198.  *   if_update - if update is to be performed on this database, value
  199.  *               be True (1L) or False(0L).
  200.  *   parameter1 and parameter2 - these are additional info the
  201.  *               SE needs from the FE. They are pointers. If
  202.  *               a SE does not need extra info, FE will just pass
  203.  *               NULL.
  204.  *               For new seeker, parameter1 is the databases max size
  205.  *               in percentage to the full-system-load.
  206.  *               CM memory is a limited resource to be shared by
  207.  *               multiple databases, and is not efficient
  208.  *               in dynamic re-allocation.
  209.  *               Seeker requires the FE to tell it the maximum size the
  210.  *               database can grow to thus it can pre-allocate the
  211.  *               right amount of processors to the databse and will
  212.  *               wrap around when it reachs the limit to squeeze out
  213.  *               old data.
  214.  *               The It is specified as the
  215.  *               percentage of the full-load CM signature pool.
  216.  *               For example, on a 8K CM with small memory, it can
  217.  *               holds up to 200 megabytes raw text size data.
  218.  *               If parameter
  219.  *        
  220.  */
  221.  
  222. long SE_close_database _AP (( database *db));
  223.  
  224. long SE_checkpointing _AP(( database *db));
  225.  
  226.  
  227.  
  228.  
  229. /* this is called when the server or indexer is started up 
  230.  *   before any other operations are run.  
  231.  *
  232.  * If this is a server starting, then file is the directory of the index.
  233.  * If this is an indexer starting, then file is the index file.
  234.  * NOTE - This routine may be called more than once
  235.  *
  236.  *   return values: 0 if successful, non-0 if error
  237.  *       defined error conditions:
  238.  *
  239.  *          -1 insufficient resources
  240.  */
  241.  
  242. long init_search_engine _AP((char* file, 
  243.                  boolean initialize, 
  244.                  boolean for_search,
  245.                  long cm_mem_percent,
  246.                  long rawtext_size,
  247.                  long grow_percent));
  248.  
  249.  
  250. /* this is called when the server is shut down.
  251.  *
  252.  *   return values: 0 if successful, non-0 if error
  253.  *       defined error conditions:
  254.  */
  255.  
  256. long finished_search_engine _AP((void));
  257.  
  258.  
  259. /*
  260.  *  ext_open_database: This function will be called on a database before
  261.  *      any operations are done on it.  It might be called multiple times 
  262.  *    with the same database before a close is done.
  263.  *    initialize: means that the database should be cleared of all state 
  264.  *          since it will be rebuilt from scratch.
  265.  *    for_search: means that the database will only be used for searching.
  266.  *        if this is false, then it can be searched and added to.
  267.  *   return values: 0 if successful, non-0 if error
  268.  *       defined error conditions:
  269.  *
  270.  *
  271.  */
  272.  
  273. long ext_open_database _AP((database *db, 
  274.                 boolean initialize, 
  275.                 boolean for_search));
  276.  
  277. /*
  278.  *  ext_close_database: This function will be called after all operations 
  279.  *    on this database are done.
  280.  *   return values: 0 if successful, non-0 if error
  281.  *       defined error conditions:
  282.  *
  283.  */
  284.  
  285. long ext_close_database _AP((database *db));
  286.  
  287. char *database_file _AP((char *database_name));
  288.  
  289. /* ============================
  290.  * ===  Building Functions  ===
  291.  * ============================*/
  292.  
  293. /* init_add_word add_word... finished_search_word 
  294.  *  is the sequence for creating an update.  When a finished_add_word is done,
  295.  *  then the it is safe (and expected) that the builder will flush things to files.
  296.  *  set query parameter can be called at any time between documents during an add.
  297.  */
  298.  
  299. /*
  300.  *  init_add_word: called before any calls to add_word.  finished_add_word
  301.  *       will be called before another init_add_word is called.
  302.  *    db is the one that will be added to.
  303.  *     parameter1 and parameter2 are implementation specific.
  304.  *   return values: 0 if successful, non-0 if error
  305.  *       defined error conditions:
  306.  * 
  307.  */
  308. long init_add_word _AP ((database *db, 
  309.              long parameter1, long parameter2));
  310.  
  311. /*
  312.  *  add_word: add this word to the database
  313.  *   return values: 0 if successful, non-0 if error
  314.  *       defined error conditions:
  315.  *
  316.  */
  317. long add_word _AP((
  318.            char *word,    /* the word to be indexed, this could be a
  319.                    word pair. If NULL there are no more words
  320.                    to be indexed */
  321.            long char_pos, /* the position of the start of the
  322.                      word */
  323.            long line_pos, /* this is passed for the best
  324.                      section calculation */
  325.            long weight,    /* how important the word looks
  326.                    syntactically (such as is it bold)
  327.                    NOT used by signature system */
  328.            long doc_id,    /* current document, this will never be 0 */
  329.            time_t date, /* display day of this document, 0 if not known */
  330.            long word_pair, /* 1 if it is, 0 if not */
  331.            database* db, /* database to insert the document */
  332.            boolean word_position /* whether the position is valid or not */
  333.            ));
  334.  
  335. /*
  336.  *  finished_add_word: states that there are no more words to add
  337.  *   to this database.
  338.  *
  339.  *   return values: 0 if successful, non-0 if error
  340.  *       defined error conditions:
  341.  *
  342.  */
  343.  
  344. long finished_add_word _AP((database *db));
  345.  
  346. /* ===============================
  347.  * ===  Maintenance Functions  ===
  348.  * ===============================*/
  349.  
  350. /*
  351.  *  delete_doc_id : delete a document
  352.  *   return values:  0, successfull
  353.  *                  -1, document not found
  354.  *
  355.  */
  356. long delete_doc_id _AP((long doc_id, database *db));
  357.  
  358. /* =============================
  359.  * ===  Searching Functions  ===
  360.  * =============================*/
  361.  
  362.  
  363. /*
  364.  *  set_query_parameter : set query parameter
  365.  *      set search attributes such as date factor, document source ids,
  366.  *      and maximum number of documents returned in a search ( the last
  367.  *      one is an important performance factor to signature  type system)
  368.  *      The search artributes applies to all comming queries until
  369.  *      they are re-set by next set_query_parameter call.
  370.  *
  371.  *   return values:  none
  372.  *
  373.  */
  374. #define SET_MAX_RETRIEVED_MASK 1
  375. #define SET_DATE_FACTOR_MASK   2
  376. #define SET_SELECT_SOURCE      4
  377.  
  378. /* enum literals for date_factor */
  379. #ifndef DF_INDEPENDENT
  380. #define DF_INDEPENDENT          1
  381. #define DF_LATER                2
  382. #define DF_EARLIER              3
  383. #endif
  384.  
  385. typedef struct {
  386.   long max_hit_retrieved;
  387.   /* max number of hits can be returned by
  388.    * the search engine. For a signature
  389.    * type system, the default value is 20
  390.    */
  391.   long date_factor;        /* default is DF_INDEPENDENT */
  392.   long num_db;            /* value of zero indicating select all,
  393.                  * default is selecting all
  394.                  */
  395.   char **srcs;            /* string of sources to be searched */
  396. }  query_parameter_type;
  397.  
  398. /*
  399.  *  set_query_parameter: set a mode variable for the search engine
  400.  *   return values: 0 if successful, non-0 if error
  401.  *       defined error conditions:
  402.  *
  403.  */
  404.  
  405. long set_query_parameter _AP ((
  406.              long mask,
  407.              query_parameter_type *parameters
  408.              /* fields in the query parameter structure are only
  409.               * interpreted when the corresponding mask bit 
  410.               * is set in the mask argument.
  411.               */
  412.              ));
  413.  
  414.  
  415.  
  416. /*
  417.  *  init_search_word: called before any search_word is called in this query.
  418.  *     The only operations that occur after this is search_word.
  419.  *   return values: 0 if successful, non-0 if error
  420.  *       defined error conditions:
  421.  *
  422.  */
  423.  
  424. long init_search_word _AP((database* db));
  425.  
  426. /*
  427.  *  search_word: searches for a word in the index.  it side effects 
  428.  *               internal state so that best_hit will return the correct 
  429.  *               results.
  430.  *   return values: 0 if successful, non-0 if error
  431.  *       defined error conditions:
  432.  *
  433.  */
  434.  
  435. long search_word 
  436.   _AP ((char *word, /* the word to be searched for */
  437.     long char_pos,        /* the position of the start of the word */
  438.     long line_pos,        /* is this needed? not for signature system */
  439.     long weight,        /* how important the word looks syntactically,
  440.                    such as is it bold */
  441.     long relevant_doc_number,/* current document, seed words is 0,
  442.                    then it increments into the relevant 
  443.                    document */
  444.     long word_pair, /* 1 if it is, 0 if not */
  445.     database *db
  446.     ));
  447.  
  448.  
  449. /*
  450.  *  finished_search_word: states that there are no more words that will
  451.  *   be searched for before best_hit will be called.
  452.  *
  453.  *   return values: 0 if successful, non-0 if error
  454.  *       defined error conditions:
  455.  *
  456.  */
  457.  
  458. long finished_search_word _AP((database *db));
  459.  
  460.  
  461.  
  462. /*
  463.  *  init_best_hit: called before any best_hit is called in this query.
  464.  *     The only operations that occur after this is best_hit.
  465.  *   return values: 0 if successful, non-0 if error
  466.  *       defined error conditions:
  467.  *
  468.  */
  469.  
  470. long init_best_hit _AP((database *db));
  471.  
  472. /*
  473.  *  best-hit :
  474.  *
  475.  *   return values:  0, successfull
  476.  *                  -1, no more documents to return
  477.  *            Other values returned to signal future signals.
  478.  *
  479.  */
  480. long best_hit _AP ((database* db,long *doc_id, long *best_character, 
  481.             long *best_line, long *score));
  482.  
  483. /*
  484.  *  finished_best_hit: states that there are no more best_hits will be called
  485.  *   before the next set of search_words or add_words.
  486.  *
  487.  *   return values: 0 if successful, non-0 if error
  488.  *       defined error conditions:
  489.  *
  490.  */
  491.  
  492. long finished_best_hit _AP((database* db));
  493.  
  494. #ifdef __cplusplus
  495.     }
  496. #endif /* def __cplusplus */
  497.  
  498. #endif /* ndef IREXT_H */
  499.